package cn.com.wxd.dao.log;

import java.util.List;

import cn.com.wxd.entity.log.AccesslogInfo;
import cn.com.wxd.entity.log.AccesslogTempInfo;
import cn.com.wxd.entity.log.UserLogInfo;
import cn.com.wxd.common.PageInfo;
import cn.com.wxd.common.data.KVMap;

/**
 * Title:用户访问日志数据层接口
 * Description:cn.com.wxd.dao.log
 * 
 * Company: Amumu管理平台
 * Copyright: Copyright (c) 2015
 * All right reserved.
 * Created time: 2016-4-14 下午4:40:34
 *
 * @author WangXuDong
 * @version 1.0
 */
public interface AccessLogDao {
	/**
	 * 获取总访问量
	 * @return
	 */
	int getVisitorVolume();
	/**
	 * 根据地点获取访问量
	 * @param country 国家
	 * @param area 地区省份
	 * @param city 城市
	 * @return
	 */
	int getPvbyAddress(String country, String area, String city);
	/**
	 * 获取今日访问记录
	 * @return
	 */
	int getPVofToday();
	/**
	 * 归档到访问日志表并清理临时表
	 * @param ai 访问记录列表
	 * @return 是否成功
	 */
	boolean archiveAccessRecode(List<AccesslogInfo> ai);
	/**
	 * 添加一条访问记录到临时表
	 * @param ati
	 * @return
	 */
	boolean addAccessRecode(AccesslogTempInfo ati);
	/**
	 * 根据IP从临时表中查询记录数量
	 * @param ip
	 * @return
	 */
	int getAccessRecodeCountByIp(String ip);
	/**
	 * 从用户记录临时表中获取所有的数据
	 * @return 
	 */
	List<AccesslogTempInfo> selectAccesslogFormTemp();
	/**
	 * 清空访客临时表
	 * @return
	 */
	boolean cleanAccesslogTempTable();
	/**
	 * 插入一条用户日志
	 * @param userLog 用户日志信息
	 * @return 是否成功
	 */
	boolean insertUserLog(UserLogInfo userLog);
	/**
	 * 根据用户id查询用户日志
	 * @param userId 用户ID
	 * @param page 页面信息
	 * @return 用户列表
	 */
	List<UserLogInfo> selectUserLog(int userId, PageInfo page);
	/**
	 * 查询用户日志，根据一些条件，
	 * @param param 条件,key为字段名，value为值
	 * @param order 排序字段，
	 * @param fuzzField 模糊查询字段，为null不模糊查询
	 * @param page 分页信息
	 * @return 用户日志列表
	 */
	List<UserLogInfo> selectUserLog(KVMap<String, Object> param, KVMap<String, String> order, List<String> fuzzField,
                                    PageInfo page);
	/**
	 * 查询时间段内的用户日志
	 * @param userId
	 * @param begintime 开始时间
	 * @param endtime 结束时间
	 * @param page 分页信息
	 * @return 日志列表
	 */
	List<UserLogInfo> selectUserLogInTimeBuc(int userId, String begintime, String endtime, PageInfo page);
	/**
	 * 查询从现在开始dayNum天后这几天的的访问量
	 * @param dayNum
	 * @return
	 */
	int[] selectGroupByDay(int dayNum);
	 /**
	  * 查询某一天的访问量
	  * @param dateTime 时间格式yyyy-mm-dd
	  * @return
	  */
	int selectVVByDay(String dateTime);
}
